Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

133
Visualizações
¿Dónde dice en ECMAScript que la promesa resuelta tiene [[PromiseResult]] igual al objeto?

Estoy tratando de hacer coincidir el funcionamiento de la función de resolve de una promesa con el procedimiento correspondiente en la especificación ECMAScript. Más específicamente, estoy buscando la especificación en el caso de que se llame a la función de resolución con un valor de objeto.

Toma estos ejemplos:

 new Promise((resolve) => { resolve("hello"); }); new Promise((resolve) => { resolve({a: 100}); });

Hay una diferencia entre estas dos promesas: el tipo de valor pasado a la función de resolve .

Este es el procedimiento para la función de resolución de la especificación ECMAScript :

  1. Sea F el objeto de la función activa.

  2. Afirmar: F tiene una [[Promesa]] ranura interna cuyo valor es un Objeto.

  3. Sea promesa F .[[Promesa]].

  4. Sea yaResuelto F .[[YaResuelto]].

  5. Si yaResuelto .[[Valor]] es verdadero , devuelve undefined .

  6. Establezca yaResuelto .[[Valor]] en verdadero .

  7. Si SameValue( resolución , promesa ) es verdadero , entonces

    una. Deje que selfResolutionError sea un objeto TypeError recién creado.

    b. Devuelve RejectPromise( promise , selfResolutionError ).

  8. Si Tipo (resolución) no es Objeto, entonces

    una. Devuelve FulfillPromise ( promesa , resolución ).

  9. Sea entonces Get( resolución , "entonces" ).

  10. Si entonces es una finalización abrupta, entonces

    una. Devuelve RejectPromise( promise , luego .[[Valor]]).

  11. Sea entoncesAcción entonces .[[Valor]].

  12. Si IsCallable( thenAction ) es falso , entonces

    una. Devuelve FulfillPromise ( promesa , resolución ).

  13. Deje que thenJobCallback sea HostMakeJobCallback( thenAction ).

  14. Deje que el trabajo sea NewPromiseResolveThenableJob ( promesa , resolución , luego JobCallback ).

  15. Ejecute HostEnqueuePromiseJob( trabajo .[[Trabajo]], trabajo .[[Reino]]).

  16. Devolver indefinido .

No puedo precisar dónde se trata el caso que tiene un objeto como argumento sin una propiedad then .

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El paso 9 obtiene la propiedad then

  1. Sea entonces Get( resolución , "entonces" ).

Hay principalmente cuatro resultados posibles:

  1. then no es una propiedad del objeto, entonces (la variable) representa un registro de finalización con [[Valor]] undefined
  2. then es una propiedad del objeto, pero evaluarlo produce una excepción (por ejemplo, es un captador y el captador se encuentra con una excepción). entonces es entonces una llamada terminación abrupta .
  3. then es una propiedad del objeto, pero no es una función
  4. then es una propiedad del objeto, y es una función.

El paso 10 busca uno de estos resultados:

  1. Si entonces es una finalización abrupta, entonces
    una. Devuelve RejectPromise( promise , luego .[[Valor]]).

Aquí hay un fragmento que hace que 10.a suceda:

 let obj = { get then() { throw "sorry"; } }; new Promise(resolve => resolve(obj)) .catch((err) => console.log("rejected with ", err))

Esto representa el caso en el que then no necesariamente tiene la intención de evaluar como una función (es un captador, por lo que el código debe ejecutarse para determinar eso), pero acceder a él hace que sea imposible saber si sería una función o no, ya que produce una excepción. La especificación menciona la ejecución del getter en [[Get]]

El paso 11 es una simple asignación del campo [[Value]] del registro de finalización recuperado (tenga en cuenta que también hay otros campos, como [[Type]] )

  1. Sea entoncesAcción entonces .[[Valor]].

El paso 12 comprueba si este valor es una función:

  1. Si IsCallable( thenAction ) es falso , entonces
    una. Devuelve FulfillPromise ( promesa , resolución ).

Si no es una función, la promesa principal se cumple con ese objeto como valor.

Los pasos restantes se ocupan del caso donde entonces es una función.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda